// import 'package:flutter/material.dart';

// class NUploadBox extends StatefulWidget {

//   NUploadBox({
//     Key? key,
//     required this.items,
//     this.maxCount = 9,
//     this.rowCount = 4,
//     this.spacing = 10,
//     this.showFileSize = false,
//   }) : super(key: key);

//   List<XFile> items;
//   /// 做大个数
//   int maxCount;
//   /// 每行个数
//   int rowCount;

//   double spacing;
//   /// 显示文件大小
//   bool showFileSize;

//   @override
//   _NUploadBoxState createState() => _NUploadBoxState();
// }

// class _NUploadBoxState extends State<NUploadBox> {

//   final ImagePicker _picker = ImagePicker();

//   late final selectedAssets = widget.items ?? <XFile>[];

//   @override
//   Widget build(BuildContext context) {
//     return photoSection(
//       items: widget.items,
//       maxCount: widget.maxCount,
//       rowCount: widget.rowCount,
//       spacing: widget.spacing,
//     );
//   }

//   photoSection({
//     List<XFile> items = const [],
//     int maxCount = 9,
//     int rowCount = 4,
//     double spacing = 10,
//   }) {
//     List<NUploadModel<XFile>> selectedModels = items.map((e){
//       return NUploadModel(
//         data: e,
//       );
//     }).toList();

//     return LayoutBuilder(
//       builder: (BuildContext context, BoxConstraints constraints){
//         var itemWidth = ((constraints.maxWidth - spacing * (rowCount - 1))/rowCount).truncateToDouble();
//         // print("itemWidth: $itemWidth");
//         return Wrap(
//             spacing: spacing,
//             runSpacing: spacing,
//             children: [
//               ...selectedModels.map((e) {
//                 // final size = await e.length()/(1024*1024);

//                 final index = selectedModels.indexOf(e);

//                 return Container(
//                   child: Column(
//                     children: [
//                       ClipRRect(
//                         borderRadius: BorderRadius.all(Radius.circular(8)),
//                         child: SizedBox(
//                           width: itemWidth,
//                           height: itemWidth,
//                           child: NUploadButton(
//                             // id: "$index",
//                             path: e.data.path ?? "",
//                             urlBlock: (url){
//                               e.url = url;
//                               // debugPrint("e: ${e.data?.name}_${e.url}");
//                               final isAllSuccess = selectedModels.where((e) =>
//                               e.url == null).isEmpty;
//                               debugPrint("isAllSuccess: ${isAllSuccess}");
//                               if (isAllSuccess) {
//                                 final urls = selectedModels.map((e) => e.url).toList();
//                                 debugPrint("urls: ${urls}");
//                               }
//                             },
//                             onDelete: (){
//                               debugPrint("onDelete: $index");
//                             },
//                           ),
//                         ),
//                       ),
//                       // buildFileSizeInfo(
//                       //    length: e.data.length(),
//                       //  ),
//                     ],
//                   ),
//                 );
//               }).toList(),
//               if (items.length < maxCount)
//                 InkWell(
//                   onTap: () {
//                     onPicker(maxCount: maxCount);
//                   },
//                   child: Container(
//                     width: itemWidth,
//                     height: itemWidth,
//                     decoration: BoxDecoration(
//                       color: Colors.black.withOpacity(0.1),
//                       // border: Border.all(width: 1),
//                       borderRadius: BorderRadius.all(Radius.circular(4)),
//                     ),
//                     child: Icon(Icons.add),
//                   ),
//                 )
//             ]
//         );
//       }
//     );
//   }

//   Widget buildFileSizeInfo({required Future<int> length}) {
//     return FutureBuilder<int>(
//       future: length,
//       builder: (BuildContext context, AsyncSnapshot snapshot) {
//         // 请求已结束
//         if (snapshot.connectionState == ConnectionState.done) {
//           if (snapshot.hasError) {
//             // 请求失败，显示错误
//             return Text("Error: ${snapshot.error}");
//           }
//           // 请求成功，显示数据
//           final response = snapshot.data/(1024 *1024);
//           final desc = response.toStringAsFixed(2) + "MB";
//           return Text(desc);
//         } else {
//           // 请求未结束，显示loading
//           return CircularProgressIndicator();
//         }
//       },
//     );
//   }

//   onPicker({
//     int maxCount = 4,
//     // required Function(int length, String result) cb,
//   }) async {
//     try {
//       // 打开相册 - 支持多选
//       final List<XFile> images = await _picker.pickMultiImage(
//         imageQuality: 50,
//       );
//       if (images.isEmpty) return;
//       if (images.length > maxCount) {
//         BrunoUtil.showToast('最多上传$maxCount张图片');
//         return;
//       }

//       for (var item in images) {
//         if (selectedAssets.length < maxCount && !selectedAssets.contains(item)) {
//           selectedAssets.add(item);
//         }
//       }
//       debugPrint("selectedAssets:$selectedAssets");
//       setState(() {});
//     } catch (err) {
//       debugPrint("err:$err");
//       BrunoUtil.showToast('$err');
//     }
//   }
// }
